package com.itcast.jdbc;

import com.itcast.util.jdbcUtils;

import java.sql.*;
import java.util.Scanner;

/**
 * 练习：
 * 需求：
 * 1. 通过键盘输入用户名和密码
 * 2. 判断用户是否登录
 */
public class jdbcDemo9 {
    public static void main(String[] args) {
        // 1.键盘录入，接收用户名和密码
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名：");
        String username = sc.nextLine();
        System.out.println("请输入密码：");
        String password = sc.nextLine();

        // 2.调用方法
//        boolean isLogin = login(username, password);
        boolean isLogin = login2(username, password);

        // 3.判断输出结果
        if (isLogin) {
            System.out.println("登录成功！");
        } else {
            System.out.println("用户名或密码错误！");
        }
    }

    /**
     * 登录方法
     * 此方法有 sql 注入问题，可以输入任意用户名，和下面密码，即可登录
     * 密码输入：a' or 'a' = 'a
     *
     * @param username 用户名
     * @param password 密码
     * @return 登录结果
     */
    public static boolean login(String username, String password) {
        if (username == null || password == null) return false;
        // 连接数据库，判断是否登录成功
        Connection connection = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            // 1.获取连接
            connection = jdbcUtils.getConnection();
            // 2.定义 sql
            String sql = "SELECT * FROM user WHERE username='" + username + "'and password='" + password + "'";
            // 3.获取执行对象
            stmt = connection.createStatement();
            // 4.执行 sql
            rs = stmt.executeQuery(sql);
            // 5.处理结果
           /* if (rs.next()) {
                return true;
            } else {
                return false;
            }*/
            return rs.next();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            jdbcUtils.close(rs, stmt, connection);
        }

        return false;
    }

    /**
     * 登录方法，使用 PreparedStatement 来实现
     * 防止 sql 注入
     *
     * @param username 用户名
     * @param password 密码
     * @return 登录结果
     */
    public static boolean login2(String username, String password) {
        if (username == null || password == null) return false;
        // 连接数据库，判断是否登录成功
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            // 1.获取连接
            connection = jdbcUtils.getConnection();
            // 2.定义 sql
            String sql = "SELECT * FROM user WHERE username = ? and password = ?";
            // 3.获取执行对象
            ps = connection.prepareStatement(sql);
            // 4.给 ？赋值
            ps.setString(1, username);
            ps.setString(2, password);
            // 5.执行 sql
            rs = ps.executeQuery();
            // 6.处理结果
           /* if (rs.next()) {
                return true;
            } else {
                return false;
            }*/
            return rs.next();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            jdbcUtils.close(rs, ps, connection);
        }

        return false;
    }
}
